/**
 * 检测是否有对应的权限，通过回调函数返回结果
 * @param {String} perName 权限名称
 * @param {function} perResultCbFun 结果回调函数，参数为true表示成功
 */
function permission_check(perName, perResultCbFun) {
	// var arr = (typeof perArr != "object") ? [perArr] : perArr; // 确保参数总是数组
	wx.getSetting({
		success(res) {
			if (!res.authSetting[perName]) {
				if (typeof perResultCbFun == "function") {
					console.log("授权状态获取失败", perName);
					perResultCbFun(false);
				}
			} else {
				if (typeof perResultCbFun == "function") {
					console.log("授权状态获取成功", perName);
					perResultCbFun(true);
				}
			}
		},
		fail(res) {
			console.log("授权状态获取失败", perName);
			if (typeof perResultCbFun == "function") {
				perResultCbFun(false);
			}
		}
	})
}

/**
 * 请求对应的权限
 * @param {String} perName 权限名称
 * @param {String} perZhName 权限对应的中文名称，用来做提示用
 * @param {function} perRequestCbFun 请求结果回调（参数为true表示成功）
 */
function permission_request(perName, perZhName, perRequestCbFun) {
	permission_check(perName,
		(perCheckResualt) => {
			if (perCheckResualt) { // 权限已经请求成功
				if (typeof perRequestCbFun == "function") {
					perRequestCbFun(true);
				}
			} else {
				// 如果没有该权限，就去申请该权限
				wx.authorize({
					scope: perName,
					success() {
						// 用户已经同意小程序使用ble，后续调用 wx.startRecord 接口不会弹窗询问
						if (typeof perRequestCbFun == "function") {
							perRequestCbFun(true);
						}
					},
					fail() {
						// 用户拒绝授予权限
						console.log("用户拒绝授权", perName);
						// 弹出提示框，提示用户需要申请权限
						wx.showModal({
							title: '申请权限',
							content: '需要使用' + perZhName + '权限，请前往设置打开权限',
							success(res) {
								if (res.confirm) {
									console.log('用户点击确定');
									// 打开权限设置页面，即使打开了权限界面，也不知道用户是否打开了权限，所以这里返回失败
									wx.openSetting({
										success(res) {
											if (typeof perRequestCbFun == "function") {
												perRequestCbFun(false);
											}
										},
										fail(err) {
											if (typeof perRequestCbFun == "function") {
												perRequestCbFun(false);
											}
										}
									})
								} else if (res.cancel) {
									if (typeof perRequestCbFun == "function") {
										perRequestCbFun(false);
									}
								}
							}
						})
					}
				})
			}
		}
	)
}



const bringBluetoothRight = () => {
	return new Promise((resolve, reject) => {
		wx.getSetting({
			success: (res) => {
				if (res.authSetting['scope.bluetooth']) {
					// 判断微信蓝牙是否授权
					resolve(wechatBluetoothAuthUtils());
				} else {
					wx.authorize({
						scope: 'scope.bluetooth',
						success: () => {
							// 同意微信授权
							resolve(wechatBluetoothAuthUtils());
						},
						fail: () => {
							uni.showModal({
								content: '连接电池，请开启小程序蓝牙授权',
								showCancel: false,
								success: () => {
									wx.openSetting({
										success: (res) => {
											if (res
												.authSetting[
													'scope.bluetooth'
													]) {
												// 同意微信授权
												resolve(
												wechatBluetoothAuthUtils());
											}
										},
									});
								},
							});
						},
					});
				}
			},
		});
	});
};

const wechatBluetoothAuthUtils = () => {
	const {
		bluetoothEnabled,
		platform
	} = uni.getSystemInfoSync();
	// 设备为IOS时，微信蓝牙是否开启
	if (platform === 'ios') {
		return new Promise((resolve, reject) => {
			// 初始化蓝牙模块(用openBluetoothAdapter 方法解决部分ios设备，授权蓝牙失败的问题)
			uni.openBluetoothAdapter({
				success: () => {
					// 开启蓝牙功能 =》 初始化拾果sdk
					resolve(true);
				},
				fail: (openBlueFail) => {
					if (openBlueFail.state === 3) {
						// 说明微信应用蓝牙未授权
						uni.showModal({
							content: '检测到您未允许微信访问手机蓝牙权限，是否打开系统设置？',
							showCancel: false,
							confirmText: '前往设置',
							success: () => {
								// 跳转微信应用权限
								wx.openSetting();
							},
						});
					} else if (openBlueFail.state === 4) {
						// 说明系统蓝牙未开启
						uni.showModal({
							content: '蓝牙设置 - 小程序需要通过蓝牙搜索和连接设备，请确认手机蓝牙功能是否已开启？',
							showCancel: false,
							confirmText: '我已开启',
							success: async () => {
								const {
									bluetoothEnabled,
									platform
								} = uni.getSystemInfoSync();
								if (bluetoothEnabled) {
									// 开启蓝牙功能
									resolve(true);
								} else {
									uni.showToast({
										icon:"error",
										title: '手机蓝牙未开启'
									});
								}
							},
						});
					}
				},
			});
		});
	} else {
		return new Promise(function(resolve, reject) {
			// andriod
			if (!bluetoothEnabled) {
				// 说明系统蓝牙未开启
				uni.showModal({
					content: '蓝牙设置 - 小程序需要通过蓝牙搜索和连接设备，请确认手机蓝牙功能是否已开启？',
					showCancel: false,
					confirmText: '我已开启',
					success: async () => {
						const {
							bluetoothEnabled,
							platform
						} = uni.getSystemInfoSync();
						if (bluetoothEnabled) {
							// 开启蓝牙功能
							resolve(true);
						} else {
							uni.showToast({
								icon:"error",
								title: '手机蓝牙未开启'
							});
						}
					},
				});
			} else {
				// 开启蓝牙功能
				resolve(true);
			}
		});
	}
};

module.exports = {
	permission_check,
	permission_request,
	bringBluetoothRight
}